<?php
class CargaMasivaAsistentesCatedraParser extends CargaMasivaParser{

	private $areas;
	private $id_ciclo;
	private $cursos=array();

	private $datos_map=array(
			'codigo_curso'=>'A',
			'nombre_curso'=>'B',
			'seccion'=>'C',
			'nombre_catedratico'=>'D',
			'carne_asistente_catedra1'=>'E',
			'nombre_asistente_catedra1'=>'F',
			'telefonos_asistente_catedra1'=>'G',
			'correos_asistente_catedra1'=>'H',
			'fecha_inicio_asistente_catedra1'=>'I',
			'vacio'=>'J',
			'carne_asistente_catedra2'=>'K',
			'nombre_asistente_catedra2'=>'L',
			'telefonos_asistente_catedra2'=>'M',
			'correos_asistente_catedra2'=>'N',
			'fecha_inicio_asistente_catedra2'=>'O'
	);


	public function __construct($path_archivo,$id_ciclo){
		parent::__construct($path_archivo);
		$this->id_ciclo=$id_ciclo;
	}

	public function parse(){
		//var_dump($this->cursos);die();
		foreach ($this->cursos as $curso_seccion){
			$codigo_curso=$curso_seccion['codigo_curso'];
			$seccion=$curso_seccion['seccion'];
			$cursoCiclo=CursoCiclo::model()->find(array(
					'condition'=>'cu.codigo_curso=:codigo_curso and s.descripcion=:seccion'
					,'alias'=>'c'
					,'join'=>'inner join seccion s on s.id=c.id_seccion
					inner join curso cu on cu.id=c.id_curso'
					,'params'=>array(':codigo_curso'=>$codigo_curso,':seccion'=>$seccion)));
			if(!isset($cursoCiclo)){
				throw  new Exception("El curso con el codigo $codigo_curso y seccion $seccion no ha sido creado, por favor verifique");
			}
			if(count($curso_seccion['asistentes_catedra'])>0){					
				foreach ($curso_seccion['asistentes_catedra'] as $datosAsistenteCatedra){
					$this->procesarAsistenteCatedra($curso_seccion,$cursoCiclo,$datosAsistenteCatedra);
				}
			}else{
				throw  new Exception("Tiene que existir al menos un asistente de catedra para el curso $codigo_curso $curso_seccion[nombre_curso] seccion $seccion");
			}
		}
	}

	private function procesarAsistenteCatedra($curso_seccion,$cursoCiclo,$datosAsistenteCatedra){
		$asistenteCatedra=AsistenteCatedra::model()->find('numero_carne=:carne',array(':carne'=>$datosAsistenteCatedra['carne']));
		$codigo_curso=$curso_seccion['codigo_curso'];
		if(isset($asistenteCatedra)){
			$cursoCiclo->asignarParticipante($asistenteCatedra->id_rol_partido);
		}
		else{
			$carne=$datosAsistenteCatedra['carne'];
			$nombre=$datosAsistenteCatedra['nombre'];
			if(isset($nombre)&&$nombre!=''){
				$datos['datos_personales']['nombre']=$datosAsistenteCatedra['nombre'];
				$datos['datos_asistente_catedra']['numero_carne']=$datosAsistenteCatedra['carne'];
				$datos['datos_asistente_catedra']['id_estado_laboral']=null;
				$datos['datos_asistente_catedra']['empresa']=null;
				$datos['datos_usuario']['password']='';
					
				//correos
				$correos=explode(',',$datosAsistenteCatedra['correos']);
				foreach ($correos as $correo){
					if($correo!=''){
						$datos['correos_electronicos'][]=$correo;
					}
				}
				$telefonos=explode('-',$datosAsistenteCatedra['telefonos']);
				if (count($telefonos)>=1){
					$datos_contacto['telefono_celular']=$telefonos[0];
					if(count($telefonos)==2){
						$datos_contacto['telefono_domicilio']=$telefonos[1];
					}
					$datos['datos_contacto']=$datos_contacto;
				}
				AsistenteCatedra::model()->guardarAsistenteCatedra($datos);
			}
			else{
				throw  new Exception("El nombre del asistente de catedra con numero de carne $carne para el curso $codigo_curso $curso_seccion[nombre_curso] $curso_seccion[seccion] no esta definido ");
			}

		}
	}




	/*Hace una validacion del archivo y genera un array de cursos agrupados por codigo de curso
	 * ver el var_dump($cursos) para darse una mejor idea de lo que el array contiene
	*/
	public function validarArchivo(){
		$resultado=true;
		$resultadoError='';
		$areaActual=array();
		$contador=0;

		foreach($this->archivo as $linea){
			if(isset($linea)&&count($linea)>0)
			{
				if($linea['A']!=null)
				{
					$areas=array();
					$textoPrimeraCelda=strtolower(trim($linea['A']));

					if(preg_match('/rea:/',$textoPrimeraCelda,$matches) )
					{//contiene area de los cursos
						//Linea de area
						$datos_area=explode(':',$textoPrimeraCelda);
						$areaActual['nombre_area']=trim(strtoupper($datos_area[1]));
					}
					else if(preg_match('/^coordinador/',$textoPrimeraCelda))
					{
						if(isset($areaActual['nombre_area']))
						{
							$datos_cooridinador=explode(':',$textoPrimeraCelda);
							$areaActual['coordinador']=$datos_cooridinador[1];
						}
						else
						{

							$resultadoError=$this->mensajeError("Debe especificar un area para el  $textoPrimeraCelda", $contador);
							throw  new Exception($resultadoError);
						}
					}
					else if(is_numeric($textoPrimeraCelda))
					{
						$codigo_curso=$this->estandarizarCodigoCUrso(trim($textoPrimeraCelda));
						$seccion=trim($linea[$this->datos_map['seccion']]);

						$curso_seccion=array();
						$curso_seccion['nombre_area']=trim($areaActual['nombre_area']);
						$curso_seccion['codigo_curso']=$codigo_curso;
						$curso_seccion['seccion']=trim($seccion);
						$curso_seccion['nombre_curso']=trim($linea[$this->datos_map['nombre_curso']]);
						$curso_seccion['nombre_catedratico']=trim($linea[$this->datos_map['nombre_catedratico']]);
							
						$asistenteCatedra1['carne']=trim($linea[$this->datos_map['carne_asistente_catedra1']]);
						$asistenteCatedra1['nombre']=trim($linea[$this->datos_map['nombre_asistente_catedra1']]);
						$asistenteCatedra1['telefonos']=trim($linea[$this->datos_map['telefonos_asistente_catedra1']]);
						$asistenteCatedra1['correos']=trim($linea[$this->datos_map['correos_asistente_catedra1']]);
						$asistenteCatedra1['fecha_inicio']=trim($linea[$this->datos_map['fecha_inicio_asistente_catedra1']]);


						$curso_seccion['asistentes_catedra'][]=$asistenteCatedra1;
							
						$carneAsistenteCatedra2=trim($linea[$this->datos_map['carne_asistente_catedra2']]);
							
						if(isset($carneAsistenteCatedra2))
						{
							$asistenteCatedra2['carne']=trim($linea[$this->datos_map['carne_asistente_catedra2']]);
							$asistenteCatedra2['nombre']=trim($linea[$this->datos_map['nombre_asistente_catedra2']]);
							$asistenteCatedra2['telefonos']=trim($linea[$this->datos_map['telefonos_asistente_catedra2']]);
							$asistenteCatedra2['correos']=trim($linea[$this->datos_map['correos_asistente_catedra2']]);
							$asistenteCatedra2['fecha_inicio']=trim($linea[$this->datos_map['fecha_inicio_asistente_catedra2']]);
							if(isset($asistenteCatedra2['carne'])&&$asistenteCatedra2['carne']!=''){
								$curso_seccion['asistentes_catedra'][]=$asistenteCatedra2;
							}
								
						}
						$this->cursos[]=$curso_seccion;
							

					}
				}
			}
		}
		// 		foreach ($this->cursos as $curso_seccion){
		// 			var_dump($curso_seccion);
		// 		}
		return $resultado;
	}

	private function estandarizarCodigoCurso($codigo_curso)
	{
		$len=strlen($codigo_curso);
		if($len<4){
			$codigo_curso=str_pad($codigo_curso,4,"0",STR_PAD_LEFT);

		}
		return $codigo_curso;
	}

}